//package command
//{
//	//登录命令
//	import event.GlobalEvent;
//	
//	import flash.events.Event;
//	import flash.events.IOErrorEvent;
//	import flash.events.SecurityErrorEvent;
//	import flash.events.TimerEvent;
//	import flash.net.URLRequest;
//	import flash.net.navigateToURL;
//	import flash.system.Security;
//	import flash.utils.Timer;
//	
//	import flash3.framework.LayerManager;
//	import flash3.net.INetConnect;
//	import flash3.net.MsgPacket;
//	import flash3.net.NetFacade;
//	
//	import libs.cairngorm.commands.Command;
//	import libs.cairngorm.control.CairngormEvent;
//	
//	import model.*;
//	
//	import net.*;
//	
//	import util.MD5;
//	
//	import view.layer.L;
//	import view.plugin.LoaderView;
//	import view.plugin.MessageBox;
//	
//	import vo.ClientSerial;
//	import vo.ErrorInfo;
//	import vo.GameServer;
//	import vo.LoginInfo;
//	import vo.UserStatusRequest;
//
//	public class LoginCommand implements Command, INetConnect
//	{
//		public var data:LoginInfo = null;
//		private var timer:Timer = null;
//		private var connectCount:uint = 0;
//		private var bFirstConnect:Boolean = true;
//		public function LoginCommand()
//		{
//			bFirstConnect = true;
//			timer = new Timer(5000, 3);
//			NetFacade.i.acall(LobbyLoginGroup.MDM_GP_LOGON,LobbyLoginGroup.SUB_GP_LOGON_ERROR,{call:onNetLoginFailed});
//		}
//		
//		public function execute(e:CairngormEvent):void
//		{
//		}
//		
//		public function onConnectSucceed(evt:Event):void
//		{
//			bFirstConnect = true;
//			connectSucceed();
//		}
//		public function onConnectClose(evt:Event):void
//		{
//			NetFacade.i.close();
//			trace("onConnectClose");
////			errorHandle(ErrorInfoModel.ERROR_CONNECTCLOSE);
//			reConnect(ErrorInfoModel.ERROR_CONNECTCLOSE);
//		}
//		public function onIOError(evt:IOErrorEvent):void
//		{
//			NetFacade.i.close();
//			trace("onIOError");
////			errorHandle(ErrorInfoModel.ERROR_IOERROR);
//			reConnect(ErrorInfoModel.ERROR_IOERROR);
//		}
//		public function onSecurityError(evt:SecurityErrorEvent):void
//		{
//			trace("onSecurityError");
////			errorHandle(ErrorInfoModel.ERROR_SECURITYERROR);
//			reConnect(ErrorInfoModel.ERROR_SECURITYERROR);
//		}
//		public function onNetLoginFailed(packet:MsgPacket):void
//		{
//			errorHandle(ErrorInfoModel.ERROR_LOGIN_FAILED);
//		}
//		public function errorHandle(errorType:uint):void
//		{
//			if(LayerManager.i.curState != L.L_Loader)
//				LoaderView.i.show(false);
//			var errorInfo:ErrorInfo = ErrorInfoModel.i.value(errorType);
//			if(errorInfo)
//				MessageBox.i.show(MessageBox.BTN_OK, errorInfo.describe, onLoginError);
//		}
//		private function onLoginError():void
//		{
//			if(LayerManager.i.curState == L.L_Loader || LayerManager.i.curState != L.L_Lobby)
//			{
//				if(GlobalModel.loginMode == GlobalModel.LOGIN_MODE_MAOPU)
//				{
//					GlobalModel.navigateToLogin();
//				}
//				else if(GlobalModel.loginMode == GlobalModel.LOGIN_MODE_LOCAL)
//				{
//					GameModel.i.reset();
//					NetFacade.i.close();
//					LayerManager.i.changeState(L.L_Login);
//				}
//			}
//		}
//		private function onConnectComplete(evt:TimerEvent):void
//		{
//			reConnect(0);
//			MessageBox.i.text = "正在尝试连接服务器中..."+connectCount;
//		}
//		private function connect(loginInfo:LoginInfo):void
//		{
//			Security.loadPolicyFile("xmlsocket://"+loginInfo.dwIP+":"+loginInfo.dwPort);
//			NetFacade.i.connect(loginInfo.dwIP, loginInfo.dwPort, this);
//		}
//		private function reConnect(errorType:uint):void
//		{
//			if(LayerManager.i.curState == L.L_Loader)
//			{
//				errorHandle(errorType);
//			}
//			else if(LayerManager.i.curState == L.L_Game)
//			{
//				if(bFirstConnect)
//				{
//					bFirstConnect = false;
//					timer.addEventListener(TimerEvent.TIMER_COMPLETE, onConnectComplete);
//					timer.reset();
//					timer.delay = 5000;
//					timer.repeatCount = 3;
//					timer.start();
//					connectCount = 0;
//					connectCount++;
//					MessageBox.i.show(MessageBox.BTN_CANSEL, "正在尝试连接服务器中..."+connectCount, onCanselConnect);
//				}
//				else
//				{
//					connectCount++;
//					MessageBox.i.text = "正在尝试连接服务器中..."+connectCount;
//				}
//				trace(connectCount)
//				connect(GlobalModel.i.loginInfo);
//			}
//		}
//		private function connectSucceed():void
//		{
//			bFirstConnect = true;
//			timer.removeEventListener(TimerEvent.TIMER_COMPLETE, onConnectComplete);
//			timer.stop();
//		}
//		private function onCanselConnect():void
//		{
//			if(LayerManager.i.curState == L.L_Loader)
//			{
//				if(GlobalModel.loginMode == GlobalModel.LOGIN_MODE_MAOPU)
//				{
//					GlobalModel.navigateToLogin();
//				}
//				else if(GlobalModel.loginMode == GlobalModel.LOGIN_MODE_LOCAL)
//				{
//					NetFacade.i.close();
//					LayerManager.i.changeState(L.L_Login);
//				}
//			}
//			else if(LayerManager.i.curState == L.L_Game)
//			{
//				LayerManager.i.changeState(L.L_Lobby);
//			}
//		}
//	}
//}

package command
{
	import event.GlobalEvent;
	
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.events.SecurityErrorEvent;
	import flash.net.URLRequest;
	import flash.net.navigateToURL;
	import flash.system.Security;
	
	import flash3.framework.LayerManager;
	import flash3.net.INetConnect;
	import flash3.net.MsgPacket;
	import flash3.net.NetFacade;
	
	import libs.cairngorm.commands.Command;
	import libs.cairngorm.control.CairngormEvent;
	
	import model.*;
	
	import net.*;
	
	import util.MD5;
	
	import view.layer.L;
	import view.plugin.LoaderView;
	import view.plugin.MessageBox;
	
	import vo.ClientSerial;
	import vo.ErrorInfo;
	import vo.GameServer;
	import vo.LoginInfo;
	import vo.UserStatusRequest;
	
	public class LoginCommand implements Command, INetConnect
	{
		public var data:LoginInfo = null;
		public function LoginCommand()
		{
			NetFacade.i.acall(LobbyLoginGroup.MDM_GP_LOGON,LobbyLoginGroup.SUB_GP_LOGON_ERROR,{call:onNetLoginFailed});
		}
		
		public function execute(e:CairngormEvent):void
		{
		}
		
		public function onConnectSucceed(evt:Event):void
		{
		}
		public function onConnectClose(evt:Event):void
		{
			errorHandle(ErrorInfoModel.ERROR_CONNECTCLOSE);
		}
		public function onIOError(evt:IOErrorEvent):void
		{
			errorHandle(ErrorInfoModel.ERROR_IOERROR);
		}
		public function onSecurityError(evt:SecurityErrorEvent):void
		{
			//			errorHandle(ErrorInfoModel.ERROR_SECURITYERROR);
		}
		public function onNetLoginFailed(packet:MsgPacket):void
		{
			errorHandle(ErrorInfoModel.ERROR_LOGIN_FAILED);
		}
		public function errorHandle(errorType:uint):void
		{
			if(LayerManager.i.curState != L.L_Loader)
				LoaderView.i.show(false);
			var errorInfo:ErrorInfo = ErrorInfoModel.i.value(errorType);
			if(errorInfo)
				MessageBox.i.show(MessageBox.BTN_OK, errorInfo.describe, onLoginError);
		}
		private function onLoginError():void
		{
			if(LayerManager.i.curState == L.L_Loader)
			{
				if(GlobalModel.loginMode == GlobalModel.LOGIN_MODE_MAOPU)
				{
					GlobalModel.navigateToLogin();
				}
				else if(GlobalModel.loginMode == GlobalModel.LOGIN_MODE_LOCAL)
				{
					GameModel.i.reset();
					NetFacade.i.close();
					LayerManager.i.changeState(L.L_Login);
				}
			}
			else if(LayerManager.i.curState == L.L_Game)
			{
				LayerManager.i.changeState(L.L_Lobby);
			}
		}
	}
}